from django import forms
from django.core.exceptions import ValidationError

from web.forms.bootstrap import BootStrapForm
from web.forms.widget import ColorRadioSelect
from web import models


class ProjectModelForm(BootStrapForm, forms.ModelForm):
    # 重写modelform样式 方法一
    # desc = forms.CharField(label="项目描述", widget=forms.Textarea)
    bootstrap_exclude_fields = ['color']

    class Meta:
        model = models.Project
        fields = ['name', 'color', 'desc']
        # 重写modelform样式 方法二
        widgets = {
            'desc': forms.Textarea,
            # 自定义插件
            'color': ColorRadioSelect()
        }

    # 重写父类
    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request

    def clean_name(self):
        """ 项目校验 """
        name = self.cleaned_data['name']
        creator = self.request.bug_platform.user  # 拿到创建者
        # 1，判断当前用户是否已创建此项目 (是否存在
        # 在这需要判断创建者的项目名不能重复，当项目创建者不同时，项目名是可以重复的
        exists = models.Project.objects.filter(name=name, creator=creator).exists()
        if exists:
            raise ValidationError('项目名已存在')

        # 2, 判断当前用户是否还有额度创建项目
        # 最多创建项目数
        max_project_num = self.request.bug_platform.price_policy.project_num
        # 当前用户已创建项目数
        count = models.Project.objects.filter(creator=creator).count()

        if max_project_num <= count:
            raise ValidationError('项目个数超限，请购买vip')

        return name
